﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NumericalMatrix.GenericInterfaces;
using NumericalMatrix.Services;

namespace NumericalMatrix.Interfaces
{
    //interface IMatrix
    //{
    //    double this[int i, int j] { get; set; }

    //    int Width { get; }

    //    int Height { get; }

    //    IMatrix CreateInstance(int height, int width);
    //}

    public interface IMatrix<ElementType>
    {
        ElementType this[int i, int j] { get; set; }

        int Width { get; }

        int Height { get; }

        IGroupOperations<ElementType> GroupOperations
        { get; }

        // TODO: why do I need it?
        IMatrix<GroupOperators> CreateInstance(int height, int width);

        IMatrix<double> CreateDoubleInstance(int height, int width);
    }
}
